﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows.Media;
using FM.Common;
using FM.录音.Events;
using FM.录音.Services;
using FM.录音.接口;
using FM.接口;
using Microsoft.Practices.Prism.Mvvm;
using Microsoft.Practices.Prism.PubSubEvents;
using Microsoft.Practices.Unity;


namespace FM.录音.ViewModels
{
    public class 录音视图ViewModel : BindableBase, IId
    {
        private string _名称 = "交通频率";

        private string _录音声卡;
        private string _监听声卡;
        private bool _is监视;
        private bool _is录音;
        private bool _is录音闪现;

        private bool _is监听;
        private Brush _指针画笔 = Brushes.LimeGreen;
        private IUnityContainer 人事部;
        private IEventAggregator 新闻部;
        private I监视服务 监视服务;
        private I录音服务 录音服务;
        private I监听服务 监听服务;
        private IFm录音配置 _录音配置;
        private int _id;
        private I电平信号三段 _电平值;
        private 定时器1 _录音状态闪现;
        private bool _is全屏;

        public 录音视图ViewModel(IUnityContainer 人事部cs, IEventAggregator 新闻部cs)
        {
            人事部 = 人事部cs;
            新闻部 = 新闻部cs;

            监视服务 = 人事部.Resolve<I监视服务>();
            录音服务 = 人事部.Resolve<I录音服务>("wav");
            监听服务 = 人事部.Resolve<I监听服务>();

            电平值 = 人事部.Resolve<电平表2ViewModel>();
            监视服务.电平更新EventHandler += 监视服务_电平更新EventHandler;
            _录音状态闪现 = new 定时器1();
            _录音状态闪现.事件 += 录音状态闪现_事件;


            新闻部.GetEvent<全屏Event>().Subscribe(x => Is全屏 = x, true);

        }

      

        void 录音状态闪现_事件(object sender, EventArgs e)
        {
            Is录音闪现 = !Is录音闪现;
        }

        private void 监视服务_电平更新EventHandler(object sender, I电平表 e)
        {
            电平值.更新(e);
        }

        public IFm录音配置 录音配置
        {
            get { return _录音配置; }
            set
            {
                _录音配置 = value;
                加载配置();
            }
        }

        private void 加载配置()
        {
            名称 = 录音配置.名称;
            指针画笔 = Brushes.Green;

            监视服务.录音配置 = 录音配置;
            录音服务.录音配置 = 录音配置;
            监听服务.录音配置 = 录音配置;

            Is监视 = 录音配置.自动启动监视;
            Is录音 = 录音配置.自动启动录音;

            录音声卡 = 录音配置.录音声卡;
            监听声卡 = 录音配置.监听声卡;
        }

        public Brush 指针画笔
        {
            get { return _指针画笔; }
            set { SetProperty(ref _指针画笔, value); }
        }

        public I电平信号三段 电平值
        {
            get { return _电平值; }
            set { SetProperty(ref _电平值, value); }
        }

        public string 名称
        {
            get { return _名称; }
            set { SetProperty(ref _名称, value); }
        }
        public bool Is录音闪现
        {
            get { return _is录音闪现; }
            set { SetProperty(ref _is录音闪现, value); }
        }

        public bool Is全屏
        {
            get { return _is全屏; }
            set { SetProperty(ref _is全屏, value); }
        }

        public string 录音声卡
        {
            get { return _录音声卡; }
            set { SetProperty(ref _录音声卡, value); }
        }


        public string 监听声卡
        {
            get { return _监听声卡; }
            set { SetProperty(ref _监听声卡, value); }
        }

        public bool Is监视
        {
            get { return _is监视; }
            set
            {
                SetProperty(ref _is监视, value);
                录音配置.自动启动监视 = _is监视;
                监视服务.Set监视(Is监视);
            }
        }


        public bool Is录音
        {
            get { return _is录音; }
            set
            {
                SetProperty(ref _is录音, value);
                录音服务.Set录音(Is录音);
                更新录音闪现(Is录音);
            }
        }

     

        private void 更新录音闪现(bool is录音)
        {
            Is录音闪现 = is录音;
            _录音状态闪现.Is启动 = is录音;
        }

        public bool Is监听
        {
            get { return _is监听; }
            set
            {
                SetProperty(ref _is监听, value);
                监听服务.Set监听(Is监听);

            }
        }

        public int ID
        {
            get { return _id; }
            set
            {
                SetProperty(ref _id, value);
                监视服务.ID = ID;
                录音服务.ID = ID;
                监听服务.ID = ID;
            }
        }
    }
}